﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Data.SqlClient;
using System.Text.RegularExpressions;

namespace SMS
{
    public partial class uThemMoiKhachHang : UserControl
    {
        fLogin main;
        //KhachHang kh = new KhachHang();
        public uThemMoiKhachHang(fLogin main1)
        {
            InitializeComponent();
            main = main1;

        }

        //danh sach so khung da chon



        // ket thuc

        string strConn = "Data source = QUYEN-PC;Database = SMS_SYSTEM;User ID=sa;Password=123456;"
            + "Integrated Security = true";
        SqlConnection conn;
        SqlCommand command;
        SqlCommand command2;
        SqlDataReader reader;
        int kt = 0;
        /* 
         * Kiem tra CMND da ton tai trong he thong
         * neu la 1 : CMND da ton tai va dang bi invisible
         * neu la 2 : CMND da ton tai va dang enable
         * neu la 0 : CMND chua ton tai
         * 
         */


        public int KiemTraCMNDTonTai()
        {
            string strConn = main.ConnectDB;
            // Khai báo đối tượng dùng kết nối CSDL
            conn = new SqlConnection(strConn);
            SqlCommand commandno = new SqlCommand();
            commandno.Connection = conn;
            commandno.CommandText = "select cmnd, tinhtrang from khachhang where cmnd=@cmnd";
            commandno.Parameters.Add(new SqlParameter("@cmnd", txtCMND.Text.ToString()));
            

            try
            {
                conn.Open();
                SqlDataReader readerno = commandno.ExecuteReader();
                readerno.Read();
                if (readerno[0] != null && readerno[1].ToString() == "no" )
                {
                    return 1;
                }

                if (readerno[0] != null && readerno[1].ToString() == "yes")
                {
                    return 2;
                }


                if (readerno[0] == null)
                {
                    return 0;
                }


            }
                
            catch
            {

            }
            finally
            {
                commandno.Dispose();
                conn.Close();
            }
            return 0;
        }
        //public static string ConvertToUnSign(string text)
        //{

        //    for (int i = 32; i < 48; i++)
        //    {

        //        text = text.Replace(((char)i).ToString(), " ");

        //    }

        //    text = text.Replace(".", "-");

        //    text = text.Replace(" ", "-");

        //    text = text.Replace(",", "-");

        //    text = text.Replace(";", "-");

        //    text = text.Replace(":", "-");



        //    Regex regex = new Regex(@"\p{IsCombiningDiacriticalMarks}+");



        //    string strFormD = text.Normalize(System.Text.NormalizationForm.FormD);

        //    return regex.Replace(strFormD, String.Empty).Replace('\u0111', 'd').Replace('\u0110', 'D');

        //}
        private static readonly string[] VietNamChar = new string[] 
    { 
        "aAeEoOuUiIdDyY", 
        "áàạảãâấầậẩẫăắằặẳẵ", 
        "ÁÀẠẢÃÂẤẦẬẨẪĂẮẰẶẲẴ", 
        "éèẹẻẽêếềệểễ", 
        "ÉÈẸẺẼÊẾỀỆỂỄ", 
        "óòọỏõôốồộổỗơớờợởỡ", 
        "ÓÒỌỎÕÔỐỒỘỔỖƠỚỜỢỞỠ", 
        "úùụủũưứừựửữ", 
        "ÚÙỤỦŨƯỨỪỰỬỮ", 
        "íìịỉĩ", 
        "ÍÌỊỈĨ", 
        "đ", 
        "Đ", 
        "ýỳỵỷỹ", 
        "ÝỲỴỶỸ" 
    };
        public static string LocDau(string str)
        {
            //Thay thế và lọc dấu từng char      
            for (int i = 1; i < VietNamChar.Length; i++)
            {
                for (int j = 0; j < VietNamChar[i].Length; j++)
                    str = str.Replace(VietNamChar[i][j], VietNamChar[0][i - 1]);
            }
            return str;
        }
        private bool AddEmployee()
        {
            //Chuổi chưa thông tin kết nối đến CSDL 
           // string k = LocDau(txtBidanh.ToString());
                string strConn = main.ConnectDB;
                // Khai báo đối tượng dùng kết nối CSDL
                conn = new SqlConnection(strConn);
                DateTime dateSN;
                if (cboNgay.Text == "" || cboNgay.Text == null || cboThang.Text == "" || cboThang.Text == null)
                {
                    int count = 0;
                    // Khai báo đối tượng để truy vấn dữ liệu
                    command = new SqlCommand();
                    command.Connection = conn;
                    command.CommandText = "INSERT INTO KHACHHANG(HOTEN,BIDANH,GIOITINH,DIACHI,NGAYSINH,NAMSINH,THANGSINH,DTDIDONG,DTNHA,TINHTP,QUANHUYEN,NGHENHIEP,CMND,TINHTRANG,SINHNHAT) VALUES (@Ten,@Bidanh,@Gioitinh,@Dchi,@Ngaysinh,@Namsinh,@Thangsinh,@DTDD,@DTNha,@Tinhtp,@Quanhuyen,@NgheNghiep,@CMND,@TINHTRANG,@SINHNHAT)";
                    //command = new SqlCommand("SP_THEMKHACHHANG", conn);// ten proc trong csdl
                    //command.CommandType = CommandType.StoredProcedure;
                    //Thêm các parameter
                    //1. Cách đầy đủ
                    //SqlParameter param1 = new SqlParameter ("@FirstName",emp.FirstName);
                    //command.Parameters.Add(param1);
                    //2. Gộp 2 dòng lệnh trên vào 1 dòng lệnh
                    
                    command.Parameters.Add(new SqlParameter("@Bidanh", LocDau(txtBidanh.Text.ToString()) ));
                    command.Parameters.Add(new SqlParameter("@TINHTRANG", "yes"));
                    command.Parameters.Add(new SqlParameter("@Ten", txtTenKH.Text.ToString()));
                    command.Parameters.Add(new SqlParameter("@CMND", txtCMND.Text.ToString()));
                    command.Parameters.Add(new SqlParameter("@Dchi", txtDiaChi.Text.ToString()));
                    command.Parameters.Add(new SqlParameter("@Quanhuyen", txtQuanhuyen.Text.ToString()));
                    command.Parameters.Add(new SqlParameter("@Tinhtp", txtThanhPho.Text.ToString()));
                    command.Parameters.Add(new SqlParameter("@Gioitinh", cboGT.Text.ToString()));
                    command.Parameters.Add(new SqlParameter("@Ngaysinh", DBNull.Value));
                    command.Parameters.Add(new SqlParameter("@Thangsinh", DBNull.Value));
                    command.Parameters.Add(new SqlParameter("@Namsinh", txtNam.Text.ToString()));
                    command.Parameters.Add(new SqlParameter("@NgheNghiep", txtNN.Text.ToString()));
                    command.Parameters.Add(new SqlParameter("@DTDD", txtDTDiDong.Text.ToString()));
                    command.Parameters.Add(new SqlParameter("@DTNha", txtSoDTnha.Text.ToString()));
                    command.Parameters.Add(new SqlParameter("@SINHNHAT", DBNull.Value));




                    //command2.Parameters.Add(new SqlParameter("@SOKHUNG", textBox1.Text));

                    try
                    {
                        // Mở kết nối 
                        conn.Open();
                        //Thực thi việc thêm dữ liệu.Kết quả trả về biến count là số dòng được thêm 
                        //(trong trường hợp này nếu thành công thì có một dòng dữ liệu thêm vào CSDL)
                        count = command.ExecuteNonQuery();

                    }
                    catch (SqlException ex)
                    {
                        MessageBox.Show(ex.ToString());
                    }
                    finally
                    {
                        conn.Close();
                    }
                    // kiểm tra biến count và trả về kết quả phù hợp
                    if (count == 1)
                    {
                        return true;

                    }
                    else
                    {
                        return false;
                    }
                }

                else
                {
                    dateSN = new DateTime(int.Parse(txtNam.Text), int.Parse(cboThang.Text), int.Parse(cboNgay.Text));

                    int count = 0;

                    // Khai báo đối tượng để truy vấn dữ liệu
                    command = new SqlCommand();
                    command.Connection = conn;
                    command.CommandText = "INSERT INTO KHACHHANG(HOTEN,BIDANH,GIOITINH,DIACHI,NGAYSINH,NAMSINH,THANGSINH,DTDIDONG,DTNHA,TINHTP,QUANHUYEN,NGHENHIEP,CMND,TINHTRANG,SINHNHAT) VALUES (@Ten,@Bidanh,@Gioitinh,@Dchi,@Ngaysinh,@Namsinh,@Thangsinh,@DTDD,@DTNha,@Tinhtp,@Quanhuyen,@NgheNghiep,@CMND,@TINHTRANG,@SINHNHAT)";
                    //command = new SqlCommand("SP_THEMKHACHHANG", conn);// ten proc trong csdl
                    //command.CommandType = CommandType.StoredProcedure;
                    //Thêm các parameter
                    //1. Cách đầy đủ
                    //SqlParameter param1 = new SqlParameter ("@FirstName",emp.FirstName);
                    //command.Parameters.Add(param1);
                    //2. Gộp 2 dòng lệnh trên vào 1 dòng lệnh
                    command.Parameters.Add(new SqlParameter("@Bidanh",LocDau(txtBidanh.Text.ToString())));
                    command.Parameters.Add(new SqlParameter("@TINHTRANG", "yes"));
                    command.Parameters.Add(new SqlParameter("@Ten", txtTenKH.Text.ToString()));
                    command.Parameters.Add(new SqlParameter("@CMND", txtCMND.Text.ToString()));
                    command.Parameters.Add(new SqlParameter("@Dchi", txtDiaChi.Text.ToString()));
                    command.Parameters.Add(new SqlParameter("@Quanhuyen", txtQuanhuyen.Text.ToString()));
                    command.Parameters.Add(new SqlParameter("@Tinhtp", txtThanhPho.Text.ToString()));
                    command.Parameters.Add(new SqlParameter("@Gioitinh", cboGT.Text.ToString()));
                    command.Parameters.Add(new SqlParameter("@Ngaysinh", cboNgay.Text.ToString()));
                    command.Parameters.Add(new SqlParameter("@Thangsinh", cboThang.Text.ToString()));
                    command.Parameters.Add(new SqlParameter("@Namsinh", txtNam.Text.ToString()));
                    command.Parameters.Add(new SqlParameter("@NgheNghiep", txtNN.Text.ToString()));
                    command.Parameters.Add(new SqlParameter("@DTDD", txtDTDiDong.Text.ToString()));
                    command.Parameters.Add(new SqlParameter("@DTNha", txtSoDTnha.Text.ToString()));
                    command.Parameters.Add(new SqlParameter("@SINHNHAT", dateSN));





                    //command2.Parameters.Add(new SqlParameter("@SOKHUNG", textBox1.Text));

                    try
                    {
                        // Mở kết nối 
                        conn.Open();
                        //Thực thi việc thêm dữ liệu.Kết quả trả về biến count là số dòng được thêm 
                        //(trong trường hợp này nếu thành công thì có một dòng dữ liệu thêm vào CSDL)
                        count = command.ExecuteNonQuery();

                    }
                    catch (SqlException ex)
                    {
                        MessageBox.Show(ex.ToString());
                    }
                    finally
                    {
                        conn.Close();
                    }
                    // kiểm tra biến count và trả về kết quả phù hợp
                    if (count == 1)
                    {
                        return true;

                    }
                    else
                    {
                        return false;
                    }
                }
            
            return false;
        }
        public void addCMND()
        {

            for (int i = 0; i < lstSoKhung.Items.Count; i++)
            {
                command2 = new SqlCommand();
                command2.Connection = conn;
                command2.CommandText = "UPDATE  XEMAY SET CMND= @CMND,NGAYMUA = GETDATE() where SOKHUNG=@SOKHUNG  ";
                command2.Parameters.Add(new SqlParameter("@CMND", txtCMND.Text));
                //command2.Parameters.Add(new SqlParameter("@TINHTRANG","0"));
                command2.Parameters.Add(new SqlParameter("@SOKHUNG", lstSoKhung.Items[i].ToString()));

                try
                {

                    conn.Open();
                    command2.ExecuteNonQuery();
                }
                catch (SqlException ex)
                {
                    MessageBox.Show(ex.ToString());
                }
                finally
                {
                    conn.Close();
                }
            }


        }
        private void bntThemMoi_Click_1(object sender, EventArgs e)
        {

             kt = KiemTraCMNDTonTai();
             if (txtCMND.Text == null || txtCMND.Text == "")
             {
                 MessageBox.Show("Chưa nhập số CMND!");
             }
             else
             {
                 if (txtNam.Text == null || txtNam.Text == "")
                 {
                     MessageBox.Show("Chưa nhập năm sinh!");
                 }

                 else
                 {
                     if (int.Parse(txtNam.Text.ToString()) < 1900 || int.Parse(txtNam.Text.ToString()) > 3000)
                     {
                         MessageBox.Show("Năm sinh không hợp lệ!");
                     }
                     else
                     {
                         if (kt == 1)
                         {
                             DialogResult result;
                             result = MessageBox.Show("Khách hàng đã có trong hệ thống nhưng đang invisible, bạn có muốn enable khách hàng này?", "", MessageBoxButtons.YesNo);
                             if (result == DialogResult.No)
                             {

                             }
                             if (result == DialogResult.Yes)
                             {
                                 SqlCommand command1 = new SqlCommand();
                                 command1.Connection = conn;
                                 command1.CommandText = "update khachhang set tinhtrang = @tinhtrang where cmnd=@cmnd";
                                 command1.Parameters.Add(new SqlParameter("@cmnd", txtCMND.Text.ToString()));
                                 command1.Parameters.Add(new SqlParameter("@tinhtrang", "yes"));
                                 try
                                 {
                                     conn.Open();
                                     command1.ExecuteNonQuery();
                                     MessageBox.Show("Đã Enable khách hàng, bạn có thể vào thông tin khách hàng để cập nhật!");
                                     ReSetThenkhachhang();
                                 }
                                 catch
                                 {
                                 }
                                 finally
                                 {
                                     conn.Close();
                                 }

                             }
                         }
                         else
                         {
                             if (kt == 2)
                             {
                                 MessageBox.Show("Khách hàng đã tồn tại!");
                             }
                             else
                             {
                                 if (lstSoKhung.Items.Count == 0)
                                 {
                                     MessageBox.Show("Chọn số khung ! ");
                                 }
                                 else
                                 {
                                     if (AddEmployee())
                                     {

                                         addCMND();
                                         MessageBox.Show("Đã thêm khách hàng mới vào CSDL!");
                                         ReSetThenkhachhang();
                                     }
                                     else
                                     {
                                         MessageBox.Show("Thêm Thất bại!");
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
 


        }

        public void uThemMoiKhachHang_Load(object sender, EventArgs e)
        {
            ReSetThenkhachhang();
        }

        private void panel1_Paint(object sender, PaintEventArgs e)
        {

        }

        private void label4_Click(object sender, EventArgs e)
        {

        }


        private void btnThem_Click(object sender, EventArgs e)
        {

            bool check = true;
            if (cboSokhungxe.Text == null || cboSokhungxe.Text == "")
            {
                MessageBox.Show("Chọn số khung!");
            }
            else
            {

                for (int i = 0; i < lstSoKhung.Items.Count; i++)
                {
                    if (cboSokhungxe.Text == lstSoKhung.Items[i].ToString())
                    {
                        MessageBox.Show("Số khung đã tồn tại !");
                        check = false;
                        break;
                    }
                }
                if (check)
                {
                    lstSoKhung.Items.Add(cboSokhungxe.Text);
                }
            }



        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            int i = lstSoKhung.SelectedIndex;
            if (i >= 0)
            {
                lstSoKhung.Items.RemoveAt(lstSoKhung.SelectedIndex);
            }

        }

        private void txtNam_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
            {
                e.Handled = true;
            }
            else
            {
            }

        }

        private void txtCMND_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
            {
                e.Handled = true;
            }
            else
            {
            }
        }

        private void txtDTDiDong_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
            {
                e.Handled = true;
            }
            else
            {
            }
        }

        private void txtSoDTnha_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
            {
                e.Handled = true;
            }
            else
            {
            }
        }

        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }
        public void ReSetThenkhachhang()
        {
            txtTenKH.ResetText();
            txtBidanh.ResetText();
            txtCMND.ResetText();
            txtDiaChi.ResetText();
            txtQuanhuyen.ResetText();
            txtThanhPho.ResetText();
            txtNam.ResetText();
            txtNN.ResetText();
            txtDTDiDong.ResetText();
            txtSoDTnha.ResetText();
            lstSoKhung.Items.Clear();
            cboGT.Text = null;
            cboNgay.Text = null;
            cboThang.Text = null;
            cboSokhungxe.Text = null;
            cboSokhungxe.Items.Clear();
            main.khachhang.loadcombobox(cboSokhungxe, "select * from XEMAY where cmnd is null", 0);
            main.Danhsachkhachhang.uDanhsachkhachhang_Load(null, null);
        }
        private void bntHuy_Click(object sender, EventArgs e)
        {
            ReSetThenkhachhang();
        }

        private void cboNgay_SelectedIndexChanged(object sender, EventArgs e)
        {

        }


    }
}
